Add a $wgPropagateErrors configuration variable which can be used
to prevent passing handled errors to PHP (and thus logging them twice).
Bug: T45086
Change-Id: I64ab09762a04de2007b7d7864e3c504a1d6f8aee
*/
$wgLogExceptionBacktrace = true;
*/
$wgLogExceptionBacktrace = true;
+/**
+ * If true, the MediaWiki error handler passes errors/warnings to the default error handler
+ * after logging them. The setting is ignored when the track_errors php.ini flag is true.
+ */
+$wgPropagateErrors = true;
+
/**
* Expose backend server host names through the API and various HTML comments
*/
/**
* Expose backend server host names through the API and various HTML comments
*/
public static function handleError(
$level, $message, $file = null, $line = null
) {
public static function handleError(
$level, $message, $file = null, $line = null
) {
+ global $wgPropagateErrors;
+
if ( in_array( $level, self::$fatalErrorTypes ) ) {
return call_user_func_array(
'MWExceptionHandler::handleFatalError', func_get_args()
if ( in_array( $level, self::$fatalErrorTypes ) ) {
return call_user_func_array(
'MWExceptionHandler::handleFatalError', func_get_args()
$e = new ErrorException( "PHP $levelName: $message", 0, $level, $file, $line );
self::logError( $e, 'error', $severity );
$e = new ErrorException( "PHP $levelName: $message", 0, $level, $file, $line );
self::logError( $e, 'error', $severity );
- // This handler is for logging only. Return false will instruct PHP
- // to continue regular handling.
- return false;
+ // If $wgPropagateErrors is true return false so PHP shows/logs the error normally.
+ // Ignore $wgPropagateErrors if the error should break execution, or track_errors is set
+ // (which means someone is counting on regular PHP error handling behavior).
+ return !( $wgPropagateErrors || $level == E_RECOVERABLE_ERROR || ini_get( 'track_errors' ) );